// pages/product-detail/product-detail.js
const app = getApp();
const request = require('../../utils/request');
const Toast = require('../../utils/toast');
const { isImageUrl, isVideoUrl } = require('../../utils/mediaUtils');

Page({
  data: {
    productId: null,
    product: null,
    loading: true,
    currentImageIndex: 0,
    images: [],
    specs: [],
    selectedSpec: null,
    showSpecModal: false,
    reviews: []
  },

  onShareAppMessage() {
    const { product } = this.data;
    
    // 获取第一张图片URL
    let shareImage = 'https://api.tiyue.work/uploads/logo/logo.png'; // 默认图片
    if (product && product.images && product.images.length > 0) {
      // 优先使用第一张图片（过滤视频）
      const firstImage = product.images.find(item => item.type === 'image');
      if (firstImage) {
        shareImage = firstImage.url;
      }
    }
    
    return {
      title: product ? product.name : '商品详情', // 分享卡片上显示商品名称
      imageUrl: shareImage, // 使用商品第一张图片
      path: `/pages/product-detail/product-detail?id=${this.data.productId}` // 分享路径
    }
  },

  onLoad(options) {
    if (options.id) {
      this.setData({ productId: options.id });
      this.loadProductDetail();
      this.loadSpecs();
      this.loadReviews();
    }
  },

  async loadProductDetail() {
    try {
      const res = await request.get(`/products/${this.data.productId}`);

      if (res.success) {
        const product = res.data;
        
        // 处理图片字段：确保是数组格式，并标记每个媒体类型
        if (product.image) {
          if (Array.isArray(product.image)) {
            // 已经是数组
            product.images = product.image.map(url => ({
              url: url,
              type: isImageUrl(url) ? 'image' : (isVideoUrl(url) ? 'video' : 'unknown')
            }));
          } else if (typeof product.image === 'string') {
            // 尝试解析JSON
            try {
              const parsed = JSON.parse(product.image);
              const urls = Array.isArray(parsed) ? parsed : [parsed];
              product.images = urls.map(url => ({
                url: url,
                type: isImageUrl(url) ? 'image' : (isVideoUrl(url) ? 'video' : 'unknown')
              }));
            } catch {
              // 不是JSON，单个URL转为数组
              product.images = [{
                url: product.image,
                type: isImageUrl(product.image) ? 'image' : (isVideoUrl(product.image) ? 'video' : 'unknown')
              }];
            }
          } else {
            product.images = [];
          }
        } else {
          product.images = [];
        }
        
        this.setData({
          product: product,
          loading: false,
          currentImageIndex: 0, // 当前显示的图片索引
          displayPrice: product.price // 初始化显示价格
        });
      } else {
        Toast.error(res.message || '加载失败');
      }
    } catch (error) {
      console.error('加载商品详情失败:', error);
      Toast.error('网络错误');
      this.setData({ loading: false });
    }
  },

  // 切换图片/视频
  switchMedia(e) {
    const index = e.detail.current || e.currentTarget.dataset.index;
    this.setData({
      currentImageIndex: index
    });
  },

  async buyProduct() {
    const { product, specs, selectedSpec } = this.data;
    
    // 如果商品有规格但未选择，必须先选择规格
    if (specs.length > 0 && !selectedSpec) {
      Toast.error('请先选择规格');
      this.setData({ showSpecModal: true });
      return;
    }
    
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');

    // 检查登录状态
    if (!userInfo || !userInfo.id) {
      wx.showModal({
        title: '提示',
        content: '请先登录',
        confirmText: '去登录',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/login/login'
            });
          }
        }
      });
      return;
    }

    // 检查是否是游客（游客不能支付）
    if (userInfo.isGuest === true || userInfo.isGuest === 1) {
      wx.showModal({
        title: '提示',
        content: '游客不能支付，请先登录账号或注册账号',
        confirmText: '去登录',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/login/login'
            });
          }
        }
      });
      return;
    }

    Toast.loading('正在创建订单...');

    try {
      // 获取微信登录code（用于换取openid进行支付）
      let code = null;
      try {
        const loginRes = await new Promise((resolve, reject) => {
          wx.login({
            success: resolve,
            fail: reject
          });
        });
        if (loginRes.code) {
          code = loginRes.code;
        }
      } catch (err) {
        console.warn('获取微信登录code失败:', err);
      }

      // 准备订单数据
      const orderData = {
        productId: product.id,
        code: code // 传递code，后端会换取openid
      };

      // 如果选择了规格，传递规格信息
      if (selectedSpec) {
        orderData.specInfo = JSON.stringify({
          spec_id: selectedSpec.id,
          spec_name: selectedSpec.spec_name,
          spec_value: selectedSpec.spec_value,
          spec_price: selectedSpec.price || product.price
        });
        // 使用规格价格（确保是数字类型）
        orderData.price = parseFloat(selectedSpec.price || product.price);
        console.log('选择的规格价格:', orderData.price, '类型:', typeof orderData.price);
        console.log('规格信息:', selectedSpec);
        console.log('商品原价:', product.price);
      } else {
        console.log('未选择规格，使用商品原价:', product.price);
      }

      const res = await request.post('/pay/create', orderData);

      Toast.hideLoading();

      if (res.success) {
        const { orderNo, payParams } = res.data;

        // 调起微信支付
        wx.requestPayment({
          timeStamp: payParams.timeStamp,
          nonceStr: payParams.nonceStr,
          package: payParams.package,
          signType: payParams.signType,
          paySign: payParams.paySign,
          success: () => {
            Toast.success('支付成功');
            // 支付成功后，延迟一下再跳转，确保后端已经处理完发货
            setTimeout(() => {
              wx.navigateTo({
                url: `/pages/order-detail/order-detail?orderNo=${orderNo}`
              });
            }, 1500);
          },
          fail: (err) => {
            console.error('支付失败:', err);
            Toast.error('支付已取消');
          }
        });
      } else {
        Toast.error(res.message || '创建订单失败');
      }
    } catch (error) {
      Toast.hideLoading();
      console.error('购买失败:', error);
      Toast.error('网络错误');
    }
  },

  // 预览图片
  previewImage(e) {
    const url = e.currentTarget.dataset.url;
    const items = e.currentTarget.dataset.urls || [];
    
    // 过滤出所有图片URL（排除视频）
    const imageUrls = items
      .filter(item => item.type === 'image')
      .map(item => item.url);
    
    if (imageUrls.length > 0) {
      wx.previewImage({
        current: url,
        urls: imageUrls
      });
    }
  },

  // 加载商品规格
  async loadSpecs() {
    try {
      const res = await request.get(`/specs/${this.data.productId}`, {
        status: 1 // 只加载启用的规格
      });

      if (res.success) {
        // 确保price字段是数字类型
        const specs = (res.data || []).map(spec => ({
          ...spec,
          price: spec.price ? parseFloat(spec.price) : null,
          stock: spec.stock ? parseInt(spec.stock) : -1
        }));
        
        this.setData({
          specs: specs
        });
      }
    } catch (error) {
      console.error('加载规格失败:', error);
    }
  },

  // 加载商品评论
  async loadReviews() {
    try {
      const res = await request.get(`/reviews/${this.data.productId}`, {
        page: 1,
        pageSize: 5
      });

      if (res.success) {
        const reviews = res.data.list || [];
        // 格式化时间
        reviews.forEach(review => {
          if (review.created_at) {
            review.created_at = review.created_at.replace('T', ' ').substring(0, 16);
          }
        });
        this.setData({
          reviews: reviews
        });
      }
    } catch (error) {
      console.error('加载评论失败:', error);
    }
  },

  // 显示规格选择器
  showSpecPicker() {
    this.setData({
      showSpecModal: true
    });
  },

  // 隐藏规格选择器
  hideSpecPicker() {
    this.setData({
      showSpecModal: false
    });
  },

  // 选择规格
  selectSpec(e) {
    const spec = e.currentTarget.dataset.spec;
    const { product } = this.data;
    
    // 更新选中的规格，并实时更新显示的价格
    const displayPrice = spec.price || product.price;
    
    this.setData({
      selectedSpec: spec,
      displayPrice: displayPrice
    });
  },

  // 确认规格选择
  confirmSpec() {
    const { selectedSpec, product } = this.data;
    
    if (!selectedSpec) {
      Toast.error('请选择规格');
      return;
    }
    
    // 更新商品显示价格
    this.setData({
      product: {
        ...product,
        displayPrice: selectedSpec.price || product.price
      }
    });
    
    this.hideSpecPicker();
    Toast.success('已选择: ' + selectedSpec.spec_value);
  },

  // 阻止冒泡
  stopPropagation() {},

  // 联系客服
  contactService() {
    wx.navigateTo({
      url: '/pages/customer-service/customer-service'
    });
  }
});

